package wenjun.du.androidart.threadPool

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_thread_pool.*
import wenjun.du.androidart.R
import java.util.concurrent.Executors

/**
 * Android中的线程：
 * 由于Android中UI线程是不安全的线程，所以只能在主线程更新UI，如果在子线程中做了网络请求，那么需要将子线程
 * 中请求到的数据发送到主线程中 才能更新UI
 *
 * Android中的子线程或者和子线程相关的：
 * AsyncTask：已经废除，了解，线程池加上handler封装
 * HandlerThread:创建子线程的消息循环，用来创建子线程的Handler
 * IntentService:服务加上HandlerThread  服务加上子线程
 *
 * ThreadPoolExecutor:线程池,四种常见的线程池构造方法
 *
 *
 * */
class ThreadPoolActivity : AppCompatActivity() {
    companion object {
        private const val TAG = "ThreadPoolActivity"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_thread_pool)
        val newFixedThreadPool = Executors.newFixedThreadPool(1)
        val newCachedThreadPool = Executors.newCachedThreadPool()
        val newScheduledThreadPool = Executors.newScheduledThreadPool(1) //执行定时任务的线程池
        val newSingleThreadExecutor = Executors.newSingleThreadExecutor()

        thread_pool.setOnClickListener {
            newSingleThreadExecutor.execute {
                Log.d(TAG, "onCreate: thread name ${Thread.currentThread().name}")
            }
        }
    }
}